#pragma once

// 为了避免不同平台下数据类型长度不一致，使用固定长度的整数类型
#include <cstdint>
#include "../db_common.h"

// 定义操作类型
enum class OperationType : uint8_t
{ // 使用 uint8_t 确保枚举类型只占1个字节
    LOGIN_REQUEST,
    LOGIN_RESPONSE,
    SQL_REQUEST,
    SQL_RESPONSE
};

// 使用#pragma pack(push, 1)来告诉编译器，按1字节对齐
// 这是为了防止编译器在成员之间插入填充字节，确保结构体在不同平台上的内存布局完全一致
#pragma pack(push, 1)

// 2. 定义统一的消息头
struct MessageHeader
{
    OperationType type; // 消息类型 (1字节)
    uint32_t length;    // 消息体的长度 (4字节)
};

// 定义一个用于登录的请求结构体
struct LoginRequest
{
    char username[32]; // 32字节
    char password[32]; // 32字节
};

// 定义一个通用的服务器响应结构体
struct LoginResponse
{
    bool success;      // 1字节 (C++ bool通常是1字节)
    char message[128]; // 128字节
};

#pragma pack(pop) // 恢复默认的对齐方式